/*
 * Created on 03.11.2003
 */
package de.javakicker;

import java.awt.Point;
import java.awt.Dimension;
import java.util.Collection;

/**
 * The Interface GameInfo.
 *
 * @author Till Krullmann
 */
public interface GameInfo
{
	
	/**
	 * returns the ball position from the player's view
	 *
	 * @param player the player
	 * @return the ball position as point
	 */
	Point getBallPos(Player player);

	/**
	 * provides the size of the gaming field
	 * @return the field size as dimension
	 */
	Dimension getFieldSize();

	/**
	 * calculates the amount of robots signed up for the game
	 *
	 * @return the robot count
	 */
	int getRobotCount();

	/**
	 * calculates the amount of robots signed up for the game per team
	 *
	 * @param team the team-index
	 * @param self the player
	 * @return the robot count
	 */
	int getRobotCount(int team, Player self);

	/**
	 * provides a list of all players on the gaming field. robots that skip the turn are not counted
	 *
	 * @return the field robots as Collection
	 */
	Collection <RuntimePlayer> getFieldRobots();

	/**
	 * provides a list of all players on the gaming field per team. robots that skip the turn are not counted
	 * 
	 * @param team the team-index
	 * @param self the player
	 * @return the field robots as Collection
	 */
	Collection <RuntimePlayer> getFieldRobots(int team, Player self);

	/**
	 * provides the goal difference. a positive value means that your team is leading.
	 *
	 * @param self the player
	 * @return the score difference
	 */
	int getScoreDifference(Player self);

	/**
	 * returns the content of the provided cell
	 *
	 * @param self the player
	 * @param p the point you want to know sth about
	 * @return the cell info
	 */
	int getCellInfo(Player self, Point p);

	/**
	 * return a RuntimePlayer Object for a player standing on the provided field 
	 *
	 * @param p the point
	 * @param self the player
	 * @return the runtimePlayer at specific point
	 */
	RuntimePlayer getPlayerAt(Point p, Player self);

	/**
	 * returns the player position of the provided player
	 *
	 * @param player the player
	 * @return the player position as point
	 */
	Point getPlayerPosition(Player player);

	/**
	 * returns the player priority of the provided player
	 *
	 * @param player the player
	 * @return the player priority
	 */
	int getPlayerPriority(Player player);
}
